<?php
namespace app\install\controller;
use app\install\model\Proinfo;
use app\install\model\User;
use think\Cache;
use think\Config;
use think\Db;
use think\Controller;
use think\Exception;
use app\install\model\Project;


class Index extends Controller {


    public function index(){


       $ym=$_SERVER['SERVER_NAME'];
       $http=input('server.REQUEST_SCHEME');
        $this->assign("url",$http."://".$ym);
       return $this->fetch();

    }






    public function Installation(){
        $username=input('username');
        $password=input('password');
        $hostname=input('hostname');//数据库地址
        $dbname=input('dbname');//数据库用户名
        $dbpass=input('dbpass');//数据库密码
        $database=input('database');//数据库名称
        $hostport=input('hostport');//端口号

            //判断安装日志文件是否存在
            if (!File_exists("installLog.txt")){
                //不存在就创建
                fopen("installLog.txt","w+");
            }



        /*

         如果直接通过文件修改database.php数据库配置文件
          会由于缓存问题，第一时间接收不到数据库配置，
           所以会报错，这里先使用动态配置来设置数据库配置
        */

        Config::set("database.hostname",$hostname);
        Config::set("database.username",$dbname);
        Config::set("database.password",$dbpass);
        Config::set("database.hostport",$hostport);
        $Dbuser=new User();


        /**
         1.首先判断用户名密码是否填写
         */
        if (!empty($username)&&!empty($password)){
            $key=[
                "hostname",
                'username',
                'database',
                'password',
                'hostport'
            ];



            try {
                //创建数据库、表
                $Dbuser->creates($database);

            }catch (\Exception $e){

                //如果创建有异常那么就返回异常，并输出至安装日志
                date_default_timezone_set('PRC');
                $time=date('Y-m-d H:i:s');//获取当前时间
                $error=$time."------->".$e->getMessage();
                file_put_contents('installLog.txt',$error.PHP_EOL.PHP_EOL,FILE_APPEND);

              $fh=[
                  'code'=>-4,
                  'message'=>'数据库或表创建异常，请打开安装日志查看'
              ];
                print_r(json_encode($fh));

                die();

            }


                    try {

                        $result=$Dbuser->enroll($username,md5($password));


                        /*
                         2.判断用户名和密码是否插入成功
                         */
                        if ($result>0){
                            //执行成功证明数据库配置没问题

                            $value=[
                                $hostname,$dbname,$database,$dbpass,$hostport
                            ];

                            $this->setconfig($key,$value);
                            
                            $fh=[
                                'code'=>1,
                            ];


                        }

                    }catch (\Exception $exception){

                        //数据库配置有误
                        $code=$exception->getCode();
                        if ($code){
                            $fh=[
                                'code'=>-3,
                                'message'=>'数据库配置信息填写有误'
                            ];

                        }

                    }
                }else{
                    $fh=[
                        'code'=>-2,
                        'message'=>'用户名密码未填写'
                    ];
                }

        print_r(json_encode($fh));




    }


    /**
     * 修改config的函数
     * @param $arr1 配置前缀
     * @param $arr2 数据变量
     * @return bool 返回状态
     */
    function setconfig($pat, $rep)
    {
        /**
         * 原理就是 打开config配置文件 然后使用正则查找替换 然后在保存文件.
         * 传递的参数为2个数组 前面的为配置 后面的为数值.  正则的匹配为单引号  如果你的是分号 请自行修改为分号
         * $pat[0] = 参数前缀;  例:   default_return_type
        $rep[0] = 要替换的内容;    例:  json
         */

        if (is_array($pat) and is_array($rep)) {
            for ($i = 0; $i < count($pat); $i++) {
                $pats[$i] = '/\'' . $pat[$i] . '\'(.*?),/';
                $reps[$i] = "'". $pat[$i]. "'". "=>" . "'".$rep[$i] ."',";
            }
            $fileurl ="config/database.php";

            $string = file_get_contents($fileurl); //加载配置文件
            $string = preg_replace($pats, $reps, $string); // 正则查找然后替换
            file_put_contents($fileurl, $string); // 写入配置文件
            return true;
        } else {
            return flase;
        }
    }



}
